服务器程序,最大允许的连接数,如max_connection => 10000
, 此参数用来设置Server
最大允许维持多少个TCP
连接。超过此数量后,新进入的连接将被拒绝。
max_connection
最大不得超过操作系统ulimit -n
的值,否则会报一条警告信息,并重置为ulimit -n
的值
WARN swServer_start_check: serv->max_conn is exceed the maximum value[100000].
- 应用层未设置
max_connection
,底层将使用ulimit -n
的值作为缺省设置 - 在
4.2.9
或更高版本,当底层检测到ulimit -n
超过10000
时将默认设置为10000
,原因是某些系统设置了ulimit -n
为100万
,需要分配大量内存,导致启动失败
底层使用了SESSION_LIST
来实现session_id
(虚拟fd
)与真实fd
的对应,因此除了max_sockets
限制之外,max_connection
还受限于SW_SESSION_LIST_SIZE
宏的设置。
目前SW_SESSION_LIST_SIZE
底层的值为1M
,请勿设置max_connection
超过1M
max_connection
参数不要调整的过大,根据机器内存的实际情况来设置。Swoole会根据此数值一次性分配一块大内存来保存Connection
信息,可使用gdb
跟踪运行中的进程,打印p sizeof(swConnection)
得到准确的数值。在1.9.16
版本中一个TCP连接的Connection
信息,需要占用224
字节。
此选项设置过小底层会抛出错误,并设置为ulimit -n
的值。
最小值为
(serv->worker_num + SwooleG.task_worker_num) * 2 + 32
serv->max_connection is too small.